package cn.edu.tcu.db;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.edu.tcu.bean.AdminBean;

/**
 * 使用DBUtils完成数据库操作
 * 
 * @author 
 *
 */
public class DBDriver {
   /**
    * 使用dbutils查询数据库
    * 
    * @param sql
    *         查询sql语句
    * @param rsh
    *          结果集类型
    * @param params
    *         sql语句查询参数
    * @param 查询结果集
    */
	public <T> T query(String sql,ResultSetHandler<T> rsh,Object... params){
		//返回值
		T result = null;
		try {
			//创建一个查询对象queryrunner
			QueryRunner qr = new QueryRunner(DBDataSource.getDataSource());
			//进行查询操作
			result = qr.query(sql, rsh,params);
		} catch (SQLException e) {
			// dbutils查询数据库异常
			e.printStackTrace();
		}
		return result;
	}
	/**
	 * 使用dbutils新增、删除、修改数据库
	 * 
	 * @param sql
	 *           sql语句
	 * @param params          
	 *           sql语句查询参数
	 * @return 新增、删除、修改数据库所影响的记录条数
	 * 
	 */
	public int update(String sql,Object... params){
		//返回值
		int result = 0;
		try {
			QueryRunner qr = new QueryRunner(DBDataSource.getDataSource());
			result = qr.update(sql, params);
		} catch (SQLException e) {
			// dbutils查询数据库异常
			e.printStackTrace();
		}
		return result;
	}
	/**
	 * 使用dbutils新增数据库
	 * 
	 * @param sql
	 *           sql语句
	 * @param rsh
	 *           结果集类型
	 * @param params          
	 *           sql语句查询参数
	 * @return 新增操作的结果集
	 * 
	 */
	public <T> T insert(String sql,ResultSetHandler<T> rsh,Object... params){
		T result = null;
		try{
			QueryRunner qr = new QueryRunner(DBDataSource.getDataSource());
			result = qr.insert(sql, rsh,params);
		} catch (SQLException e){
			e.printStackTrace();
		}
		return result;
	}
	
	public static void main(String[] args)throws SQLException{
		String sql = "SELECT * FROM admin";
		List<AdminBean> lstAdmins = DBFactory.getDBDriverInstance().query(sql,new BeanListHandler<>(AdminBean.class));
		for(AdminBean adminBean : lstAdmins){
			System.out.println(adminBean.getAdminName());
		}
	}
	
}
